home *** CD-ROM | disk | FTP | other *** search
/ PC Users 1999 May / Cd Pc Users extra 20 mayo 1999.iso / Prog / Inst / FTP / CONFTP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1999-03-18  |  8.5 KB  |  284 lines

  1. /*
  2. **  CONFTP.C
  3. **
  4. **  Console mode CONFTP client.  
  5. */
  6.  
  7. #include <windows.h>
  8. #include <winsock.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <ctype.h>
  13. #include "fce.h"
  14.  
  15. /* globals */
  16.  
  17. #define BS          8
  18. #define LF         10
  19. #define CR         13
  20. #define ESC        27
  21. #define TAB         9
  22.  
  23. #define MAX_STR   128
  24. #define MAX_BUF  2048
  25.  
  26. static char Temp[MAX_STR];
  27. static char CmdBuffer[MAX_STR];
  28. static char ServerDir[MAX_STR];
  29. static char LocalDir[MAX_STR];
  30. static char DataBuffer[MAX_BUF];
  31.  
  32. void Help(void)
  33. {printf("Commands are:\n");
  34.  printf("    HELP : Get help\n");
  35.  printf("    QUIT : Quit program\n");
  36.  printf("   ASCII : Set ASCII mode\n");
  37.  printf("  BINARY : Set BINARY mode\n");
  38.  printf("    LIST : List all files\n");
  39.  printf("   NLIST : List file names only (NLST)\n");
  40.  printf("     SSD : Set server directory (CWD)\n");
  41.  printf("     DSD : Display server directory (PWD)\n");
  42.  printf("     SLD : Set local directory\n");
  43.  printf("     DLD : Display local directory\n"); 
  44.  printf(" GET xxx : Get file xxx\n");
  45.  printf(" PUT xxx : Put file xxx\n");
  46.  printf(" DEL xxx : Delete file xxx\n");
  47.  printf(" FLIST n : Display fields for file # n (n>=1)\n");
  48. }
  49.  
  50. void ShowError(int Code)
  51. {Temp[0] = '\0';
  52.  fceErrorText(0,Code,(LPSTR)Temp,MAX_STR);
  53.  printf("ERROR %d: %s\n", Code, Temp);
  54. }
  55.  
  56. void ErrorExit(int Code)
  57. {ShowError(Code);
  58.  fceRelease();
  59.  exit(1);
  60. }
  61.  
  62. /* 
  63. ** CallTheDriver calls fceDriver in a loop until it returns 0,
  64. ** indicating that it is done. Refer to the FCE Users Manual
  65. ** (FCE4C_U.TXT) for details on using fceDriver. 
  66. */
  67.  
  68. ULONG CallTheDriver(char Direction)
  69. {int Code; 
  70.  ULONG ByteCount;
  71.  ULONG LastCount = 0;
  72.  ULONG TheTime;
  73.  fceSetString(0,FCE_WRITE_TO_LOG,(LPSTR)"--> Entering CallTheDriver");
  74.  /* get start time */
  75.  TheTime = GetCurrentTime();
  76.  /* AUTO_CALL_DRIVER assumed on (1) */
  77.  while(1)
  78.    {Code = fceDriver(0);
  79.     if(Code<0) ShowError(Code);
  80.     if(Code<=0) break;
  81.     /* display progress */
  82.     if(Direction=='G') ByteCount = fceGetInteger(0, FCE_GET_FILE_BYTES_RCVD);
  83.     if(Direction=='P') ByteCount = fceGetInteger(0, FCE_GET_FILE_BYTES_SENT);
  84.     if(ByteCount!=LastCount) 
  85.        {printf("%d bytes\r",ByteCount);
  86.         LastCount = ByteCount;
  87.        }
  88.    }
  89.  /* compute run time */ 
  90.  TheTime = GetCurrentTime() - TheTime;
  91.  /* re-enable automatic call to seeDriver */
  92.  fceSetInteger(0,FCE_SET_AUTO_CALL_DRIVER,1);
  93.  fceSetString(0,FCE_WRITE_TO_LOG,(LPSTR)"--> Leaving CallTheDriver");
  94.  return TheTime;
  95. }   
  96.  
  97. void main(int argc, char *argv[])
  98. {int i, n, Code;
  99.  LPSTR ServerPtr;
  100.  LPSTR UserPtr;
  101.  LPSTR PassPtr;
  102.  ULONG ByteCount;
  103.  ULONG TheTime;
  104.  int BufLen;
  105.  int Version;
  106.  int Build;
  107.  /* check arguments */
  108.  if(argc!=4)
  109.    {printf("Usage: CONFTP server user password \n");
  110.     printf("   Eg: CONFTP ftp.marshallsoft.com anonymous you@yourisp.com\n");
  111.     Help();
  112.     exit(1);
  113.    }
  114.    
  115.  ServerPtr = (LPSTR) argv[1];
  116.  UserPtr = (LPSTR) argv[2];
  117.  PassPtr = (LPSTR) argv[3];
  118.  strcpy(ServerDir,".\\");
  119.  
  120.  Code = fceAttach(1);
  121.  if(Code<0) ErrorExit(Code);
  122.  Version = fceGetInteger(0,FCE_GET_VERSION);
  123.  Build   = fceGetInteger(0,FCE_GET_BUILD);
  124.  printf("FCE32 Version: %1d.%1d.%1d Build %d\n",
  125.     0x0f&(Version>>8),0x0f&(Version>>4),0x0f&Version,Build);
  126.  fceGetString(0,FCE_GET_REGISTRATION,(LPSTR)Temp,50);
  127.  printf(" Registration: %s\n", Temp);
  128.  Code = fceSetString(0,FCE_SET_LOG_FILE,(LPSTR)"conftp.log");
  129.  
  130.  printf("Connecting...\n");
  131.   
  132.  Code = fceConnect(0,ServerPtr,UserPtr,PassPtr);
  133.  if(Code<0) ErrorExit(Code);
  134.  
  135.  printf("Connected\n");
  136.  /* ready for user commands */  
  137.  while(1)
  138.      {printf(">");
  139.       n = scanf("%s",CmdBuffer);
  140.       ///printf("%d[%s]\n", n, CmdBuffer);
  141.       /* force command to upper case */
  142.       BufLen = (int)strlen(CmdBuffer);
  143.       for(i=0;i<BufLen;i++) CmdBuffer[i] = toupper(CmdBuffer[i]);
  144.       
  145.       if(strcmp(CmdBuffer,"QUIT")==0)
  146.         {/* QUIT */
  147.          fceClose(0);
  148.          fceRelease();
  149.          break;
  150.         }
  151.  
  152.       if( (strcmp(CmdBuffer,"SSD")==0)||
  153.           (strcmp(CmdBuffer,"CWD")==0))
  154.          {n = scanf("%s",ServerDir);
  155.           Code = fceSetServerDir(0, (LPSTR)ServerDir);
  156.           if(Code<0) ShowError(Code);
  157.           continue;
  158.          }        
  159.         
  160.       if( (strcmp(CmdBuffer,"DSD")==0)||
  161.           (strcmp(CmdBuffer,"PWD")==0))
  162.          {Code = fceGetServerDir(0, (LPSTR)ServerDir, MAX_STR);
  163.           if(Code<0) ShowError(Code);
  164.           else printf("%s\n", ServerDir);
  165.           continue;
  166.          } 
  167.          
  168.       if(strcmp(CmdBuffer,"SLD")==0)
  169.          {n = scanf("%s", LocalDir);
  170.           Code = fceSetLocalDir(0, (LPSTR)LocalDir);
  171.           if(Code<0) ShowError(Code);
  172.           continue;
  173.          }        
  174.         
  175.       if(strcmp(CmdBuffer,"DLD")==0)
  176.          {Code = fceGetLocalDir(0, (LPSTR)LocalDir, MAX_STR);
  177.           if(Code<0) ShowError(Code);
  178.           else printf("%s\n", LocalDir);
  179.           continue;
  180.          }
  181.          
  182.       if(strcmp(CmdBuffer,"ASCII")==0)
  183.          {Code = fceSetMode(0,'A');
  184.           if(Code<0) ShowError(Code);
  185.           continue;
  186.          }
  187.          
  188.       if(strcmp(CmdBuffer,"BINARY")==0)
  189.          {Code = fceSetMode(0,'B');  
  190.           if(Code<0) ShowError(Code);
  191.           continue;
  192.          }
  193.          
  194.       if(strcmp(CmdBuffer,"LIST")==0)
  195.          {DataBuffer[0] = '\0';
  196.           Code = fceGetList(0,FCE_FULL_LIST,(LPSTR)DataBuffer,MAX_BUF);
  197.           if(Code<0) ShowError(Code);
  198.           else printf("%s\n", DataBuffer);
  199.           continue;
  200.          }   
  201.          
  202.       if((strcmp(CmdBuffer,"NLIST")==0)||
  203.          (strcmp(CmdBuffer,"NLST")==0))
  204.          {DataBuffer[0] = '\0';
  205.           Code = fceGetList(0,FCE_NAME_LIST,(LPSTR)DataBuffer,MAX_BUF);
  206.           //n = strlen(DataBuffer);
  207.           if(Code<0) ShowError(Code);
  208.           else printf("%s\n", DataBuffer);
  209.           continue;
  210.          }       
  211.          
  212.       if(strcmp(CmdBuffer,"HELP")==0)
  213.         {Help();
  214.          continue;
  215.         }
  216.         
  217.       if(strcmp(CmdBuffer,"GET")==0)
  218.         {n = scanf("%s",DataBuffer);
  219.          printf("Getting '%s'\n", DataBuffer);
  220.          /* disable automatic call to fceDriver */
  221.          fceSetInteger(0,FCE_SET_AUTO_CALL_DRIVER,0);        
  222.          /* ask for the file */
  223.          Code = fceGetFile(0,(LPSTR)DataBuffer);           
  224.          if(Code<0) ErrorExit(Code);
  225.          TheTime = CallTheDriver('G');
  226.          /* display final count */
  227.          ByteCount = fceGetInteger(0, FCE_GET_FILE_BYTES_RCVD);
  228.          printf("%d bytes received in %0.2f seconds\n",ByteCount,(float)TheTime/1000.0);
  229.          continue;
  230.         } 
  231.         
  232.       if(strcmp(CmdBuffer,"PUT")==0)
  233.         {n = scanf("%s",DataBuffer);
  234.          printf("Putting '%s'\n", DataBuffer);
  235.          /* disable automatic call to fceDriver */
  236.          fceSetInteger(0,FCE_SET_AUTO_CALL_DRIVER,0); 
  237.          Code = fcePutFile(0,(LPSTR)DataBuffer);
  238.          if(Code<0) ErrorExit(Code);
  239.          TheTime = CallTheDriver('P');
  240.          /* display final count */         
  241.          ByteCount = fceGetInteger(0, FCE_GET_FILE_BYTES_SENT);
  242.          printf("%d bytes sent in %0.2f seconds\n",ByteCount,(float)TheTime/1000.0);         
  243.          continue;
  244.         }
  245.         
  246.       if(strcmp(CmdBuffer,"DEL")==0)
  247.          {n = scanf("%s",DataBuffer);
  248.           printf("Deleting '%s'\n", DataBuffer);
  249.           Code = fceDelFile(0,(LPSTR)DataBuffer);
  250.           if(Code<0) ShowError(Code);
  251.           continue;
  252.          }  
  253.          
  254.       if(strcmp(CmdBuffer,"FLIST")==0)
  255.          {int Total = 0;
  256.           char LineBuf[100];
  257.           DataBuffer[0] = '\0';
  258.           scanf("%s",DataBuffer);
  259.           n = atoi(DataBuffer);
  260.           if(n<=0) 
  261.             {printf("ERROR: No such line %d\n",n);
  262.              continue;
  263.             }
  264.           /* ask for full list */
  265.           DataBuffer[0] = '\0';
  266.           Code = fceGetList(0,FCE_FULL_LIST,(LPSTR)DataBuffer,MAX_BUF);
  267.           if(Code<0) ShowError(Code);
  268.           /* get each field of line n */
  269.           for(i=1;i<=9;i++)
  270.             {Code = fceExtract((LPSTR)DataBuffer, n, i, (LPSTR)LineBuf, 100);
  271.              Total += Code;
  272.              if(Code>0) printf("LINE %d, FIELD %d: Len %2d [%s] \n", n, i, Code, LineBuf);
  273.             }
  274.           if(Total==0) printf("ERROR: No data\n");
  275.           continue;
  276.          }    
  277.          
  278.       /* don't recognize commands */  
  279.       printf("Cannot recognize command %s\n", CmdBuffer);
  280.       printf("Type HELP for help\n");
  281.      }
  282. }
  283.  
  284.